package eva.savant.businessobject.cg;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Collection;

@Table(name="CG_CUENTA")
@javax.persistence.Entity(name = "cg.Cuenta")
public class Cuenta extends eva.savant.businessobject.Entity {

    @Id
    @Column(name = "ID_CUENTA", length = 20, nullable = false)
    private String id; //ID Cuenta

    @ManyToOne
    @JoinColumn(name = "ID_SUMA", nullable = true)
    private Cuenta suma; //ID Cuenta Suma

    @Basic
    @Column(name = "CODIGO", length = 18, nullable = false)
    private String codigo; //Codigo

    @Basic
    @Column(name = "NOMBRE", length = 30, nullable = false)
    private String nombre; //Nombre

    @Basic
    @Column(name = "SIGNO", length = 10, nullable = true)
    private Integer signo; //Signo Suma o Resta

    @Basic
    @Column(name = "SALDO", length = 14, precision = 4, nullable = true)
    private BigDecimal saldo; //Saldo

    @Basic
    @Column(name = "NIVEL", length = 10, nullable = true)
    private Integer nivel; //Numero nivel

    @Basic
    @Column(name = "TIPO", length = 10, nullable = true)
    private Integer tipo; //Tipo [Grupo Detalle]

    @OneToMany
    (mappedBy = "suma", cascade = CascadeType.ALL, orphanRemoval = true) @LazyCollection(LazyCollectionOption.FALSE)
    private Collection<Cuenta> lsCuenta;

    @OneToMany
    (mappedBy = "cuenta")
    private Collection<Flujocaja> lsFlujocaja;

    @OneToMany
    (mappedBy = "cuenta")
    private Collection<Partida> lsPartida;

    @OneToMany
    (mappedBy = "cuenta")
    private Collection<PreasientoDetalle> lsPreasientoDetalle;


    public Cuenta(String id, Cuenta suma, String codigo, String nombre, Integer signo, BigDecimal saldo, Integer nivel, Integer tipo, Integer operacionId, String sociedadId, Integer usuarioId) {

        this.id= id;

        this.suma= suma;

        this.codigo= codigo;

        this.nombre= nombre;

        this.signo= signo;

        this.saldo= saldo;

        this.nivel= nivel;

        this.tipo= tipo;

        this.operacionId= operacionId;

        this.sociedadId= sociedadId;

        this.usuarioId= usuarioId;

    }

    public Cuenta() {

    }


    public String getId() {
    
        return id;
    }
    
    public void setId(String id) {
    
        this.id = id;
    }

    public Cuenta getSuma() {
    
        return suma;
    }
    
    public void setSuma(Cuenta suma) {
    
        this.suma = suma;
    }

    public String getCodigo() {
    
        return codigo;
    }
    
    public void setCodigo(String codigo) {
    
        this.codigo = codigo;
    }

    public String getNombre() {
    
        return nombre;
    }
    
    public void setNombre(String nombre) {
    
        this.nombre = nombre;
    }

    public Integer getSigno() {
    
        return signo;
    }
    
    public void setSigno(Integer signo) {
    
        this.signo = signo;
    }

    public BigDecimal getSaldo() {
    
        return saldo;
    }
    
    public void setSaldo(BigDecimal saldo) {
    
        this.saldo = saldo;
    }

    public Integer getNivel() {
    
        return nivel;
    }
    
    public void setNivel(Integer nivel) {
    
        this.nivel = nivel;
    }

    public Integer getTipo() {
    
        return tipo;
    }
    
    public void setTipo(Integer tipo) {
    
        this.tipo = tipo;
    }

    public Collection<Cuenta> getLsCuenta() {
    
        return lsCuenta;
    }
    
    public void setLsCuenta(Collection<Cuenta> lsCuenta) {
    
        this.lsCuenta = lsCuenta;
    }

    public Collection<Flujocaja> getLsFlujocaja() {
    
        return lsFlujocaja;
    }
    
    public void setLsFlujocaja(Collection<Flujocaja> lsFlujocaja) {
    
        this.lsFlujocaja = lsFlujocaja;
    }

    public Collection<Partida> getLsPartida() {
    
        return lsPartida;
    }
    
    public void setLsPartida(Collection<Partida> lsPartida) {
    
        this.lsPartida = lsPartida;
    }

    public Collection<PreasientoDetalle> getLsPreasientoDetalle() {
    
        return lsPreasientoDetalle;
    }
    
    public void setLsPreasientoDetalle(Collection<PreasientoDetalle> lsPreasientoDetalle) {
    
        this.lsPreasientoDetalle = lsPreasientoDetalle;
    }

}
